let AllSkill = require("../skill/load"); //导入

let SkillMap = {
    8001: 100,
    8002: 100,
    8003: 100,
    8004: 100,
    8005: 100,
    8006: 100,
    8007: 100,
    8008: 100,
    8009: 100,
    8010: 10000,
    8012: 100,
    8015: 10000,
    8018: 100,
    8019: 100,
    8022: 10000,
};

let SkillSelect = {
    8005: 10,
    8008: 3,
    8009: 10,
    8010: 3,
    8015: 3,
    8022: 1,
};

window.DAMAGE_TYPE = {
    NORMAL: 0,//普通攻击
    POISION: 1,//毒攻
    FIRE: 2,//火焰攻击
}

window.g_Skill = new class CSkillManager {
    constructor() {
        this.skillSelect = {...SkillSelect};
        this.skillMap = {...SkillMap};
    }
    // 重置技能次数
    resetSkillCounts() {
        // 遍历 skillSelect 并重置所有次数
        for (let id in this.skillSelect) {
            this.skillSelect[id] = this.getInitialSkillCount(id); 
        }
    }

    // 获取技能的初始次数（可选，用于更复杂的初始值设置）
    getInitialSkillCount(id) {
        for (let skillid in SkillMap) { 
            if (skillid == id) {
                return SkillMap[skillid]; 
            }
        }
    }

    // 检查技能是否还有剩余次数
    canUseSkill(id) {
        // 检查技能ID是否存在于 SkillSelect 对象中
        if (this.skillSelect.hasOwnProperty(id)) {
            // 检查剩余次数是否大于0
            return this.skillSelect[id] > 0;
        }
        return false;
    }

    // 使用技能并扣除剩余次数
    useSkill(id) {
        // 检查技能ID是否存在以及是否还有剩余次数
        if (this.canUseSkill(id)) {
            // 扣除一次使用次数
            this.skillSelect[id]--;
        } 
    }

    //随机技能
    randomSkill(cnt) {
        let sumRatio = 0;//总比例
        let tempSkill = [];//临时比例
        let limitedSkills = Object.keys(this.skillSelect); // 有数量限定的技能ID列表
        
        //计算总比例
        for (let id in this.skillMap) {
            // 如果技能在SkillSelect中且剩余次数大于0，则视为可用
            if (limitedSkills.includes(id) && this.skillSelect[id] > 0) {
                sumRatio += this.skillMap[id];
                tempSkill[id] = this.skillMap[id];
            } else if (!limitedSkills.includes(id)) {
                // 如果技能不在SkillSelect中，则视为无数量限定，始终可用
                sumRatio += this.skillMap[id];
                tempSkill[id] = this.skillMap[id];
            }
        }

        let lstResult = [];
        //生成随机数
        while (cnt--) {
            let ratio = Math.floor(Math.random() * sumRatio);//随机比例
            let tempRatio = 0;//临时比例

            for (let id in tempSkill) {//遍历比例
                tempRatio += tempSkill[id];//累加比例
                if (tempRatio > ratio) {//如果比例大于随机数
                    lstResult.push(id); // 将ID添加到结果中
                    sumRatio -= tempSkill[id]; // 减去已经使用的比例
                    delete tempSkill[id]; // 从临时比例中删除该技能
                    break;
                }
            }
        }
        return lstResult;
    }

    create(id) {
        return new AllSkill[id];
    }
};
